
<?php
if (!defined('APP_PATH')) {
	define('APP_PATH', $_SERVER['DOCUMENT_ROOT']."/bdACPA");
}
require_once(APP_PATH.'/required.php');
$message = '';
if (@$_REQUEST["mode"] == "html4") {
	if (@$_REQUEST["action"] == "cancel") {
		$message = "Abandon";
	} else {
		$filename = $_FILES["file"]["name"];
// $_FILES['file']['tmp_name'] = "/home/upcnv/Bureau/Anomalies.txt";
// $_REQUEST['idPuce'] = 78;
// $filename = "/home/upcnv/Bureau/Anomalies.txt";
if (isset($_REQUEST['idPuce']) && intval(htmlentities($_REQUEST['idPuce'])) != 0 ){
	$idpuce = intval(htmlentities($_REQUEST['idPuce']));
	$puce = $PUCE_DAO->rechercher_puce($idpuce);
	$analyse ="";
	$message = "";
	$nb_erreur = $nb_cnv = 0;
	$typePuces = $TYPEPUCE_DAO->rechercher_type_puce($puce->idtypepuce);
	$idmarquepuce = $typePuces[0]->idmarquepuce;
	//if ( ! is_null($_POST) ){

	// On v&eacute;rifier que le fichier a bien &eacute;t&eacute; t&eacute;l&eacute;charg&eacute;
	if ( ! isset($filename) || is_null($filename) ){
		$message .= "Un problème est survenu lors du téléchargement du fichier des CNV.";
	} else { //v&eacute;rifier que le nom du fichier correspond bien au type de fichier segment.
		//Puces Affymetrix 50k,250k,500k et 6.0
		if ($idmarquepuce == 2){
			if ( strpos($filename, ".cn_segments") !== FALSE ){
				// On transforme le fichier en Ressources que l'on poste
				$lignes = file($_FILES["file"]["tmp_name"]);

				$nb_erreur = $nb_cnv = 0;
				$param = "";
				$mapd = 0;
				foreach ($lignes as $num => $ligne){

					//LECTURE DE TOUS LES PARAMETRES
					if ( preg_match('/^#MinimumMarkersInSegment=/', $ligne) ) {
						$s = explode("#MinimumMarkersInSegment=", $ligne);
						$mmis = trim($s[1]);
						continue;
					}
					if ( preg_match('/^#MinimumGenomicSegmentSize=/', $ligne) ) {
						$s = explode("#MinimumGenomicSegmentSize=", $ligne);
						$mgss = "-".trim($s[1]);
						continue;
					}
					if ( preg_match('/^#MaximumOverlapOfCNVWithSNP=/', $ligne) ) {
						$s = explode("#MaximumOverlapOfCNVWithSNP=", $ligne);
						$moos = "-".trim($s[1]);
						continue;
					}
					if ( preg_match('/^#Arrayset=GenomeWideSNP_6/', $ligne) ) {
						$typepuce = 3;
						continue;
					}
					if ( preg_match('/^#State=/', $ligne) ) {
						$s = explode("#State=", $ligne);
						$analyse .= trim($s[1]);
						continue;
					}
					if ( preg_match('/^#Arrayset=/', $ligne) ) {
						$s = split("#Arrayset=", $ligne);
						$analyse .= trim($s[1]);
						continue;
					}
					if ( preg_match('/^#snp-annotation-file=/', $ligne) ) {
						$s = split("#snp-annotation-file=", $ligne);
						$analyse .= trim($s[1]);
						continue;
					}
					if ( preg_match('/^#cn-annotation-file=/', $ligne) ) {
						$s = split("#cn-annotation-file=", $ligne);
						$analyse .= trim($s[1]);
						continue;
					}
					if ( preg_match('/^#genome=hg18/', $ligne) ) {
						$genome = "hg18";
						continue;
					}
					if ( preg_match('/^#genome=hg19/', $ligne) ) {
						$genome = "hg19";
						continue;
					}
					if ( preg_match('/^#madPairDiff=/', $ligne) ) {
						$s = explode("#madPairDiff=", $ligne);
						$mapd = trim($s[1]);
						continue;
					}
					// On d&eacute;coupe le fichier et on instancie des AlterationChromosomique
					$elements = explode("\t", $ligne);

					// On v&eacute;rifie que le fichier soit un fichier de format "cn_segment" ou "cn_segment + Commentaire"
					if ( count($elements) != 15 && count($elements) != 16 ){
						continue;
					}
					$CNV = new CNV();
					$CNV->idpuce = $idpuce;
					$CNV->chromosome = $elements[3];
					$CNV->positiondebut = $elements[10];
					$CNV->positionfin = $elements[11];
					$CNV->sondedebut = $elements[12];
					$CNV->sondefin = $elements[13];
					$CNV->nbcopie = $elements[1];

					if ($CNV->chromosome != null && $CNV->chromosome != ""){
						$result = $CNV_DAO->ajouter_cnv($CNV);
						if ( is_nan($result) ){
							$nb_erreur++;
							$message .= "Erreur lors de l'enregistrement du CNV : ".$result;
						} else {
							$nb_cnv++;
						}
						unset($CNV);
					}

				}
			}//fin traitement affymetrix  6.0 (fichiers segment)
			//traitement affymetrix issus de Chas
			else if ( strpos($filename, ".tsv") !== FALSE || strpos($filename, ".txt") !== FALSE ){

				// On transforme le fichier en Ressources que l'on poste
				$lignes = file($_FILES['file']['tmp_name']);
					
				$param = "";
				$mapd = 0;
				$nbLigne = 0;
				$index =  array();
				foreach ($lignes as $num => $ligne){
					if ($nbLigne == 0){
						$titres = explode("\t", $ligne);
						$nb_titre = count($titres);
						for ($i = 0;$i<$nb_titre; $i++){
							$titre = $titres[$i];
							if ($titre==='CN State'){
								$index['cn_statut']= $i;
							}
							if ($titre==='Type'){
								$index['Type']= $i;
							}
							if ($titre==='Chromosome'){
								$index['chromosome']= $i;
							}
							if ($titre === 'Min'){
								$index['debut']= $i;
							}
							if ($titre === 'Max'){
								$index['fin']= $i;
							}
							// 									if ($titre==='Mean Marker Distance'){
							// 										$index['Mean Marker Distance']= $i;
							// 									}
							// 									if ($titre==='Confidence'){
							// 										$index['Confidence']= $i;
							// 									}
							if ($titre==='Marker Count'){
								$index['nb_marqueurs']= $i;
							}
					}
					// 								//print_r($index);echo "<br/>";
				}

				else {
					// On d&eacute;coupe le fichier et on instancie des AlterationChromosomique
					$elements = explode("\t", $ligne);

					$CNV = new CNV();
					$CNV->idpuce = $idpuce;
					if (isset($index['chromosome'])){
						$CNV->chromosome = $elements[$index['chromosome']];
					} else{
						$CNV->chromosome = "";
					}
					if (isset($index['debut'])){
						$CNV->positiondebut = str_replace ( "," , "" , $elements[$index['debut']]);
					} else{
						$CNV->positiondebut = "";
					}
					if (isset($index['fin'])){
						$CNV->positionfin = str_replace ("," , "" ,$elements[$index['fin']]);
					} else{
						$CNV->positionfin = "";
					}
					if (isset($index['cn_statut'])&& $elements[$index['cn_statut']] != ""){
						$CNV->nbcopie = $elements[$index['cn_statut']];
					}
					if ($elements[$index['Type']]==="LCSH" || $elements[$index['Type']]==="LOH"){
						$CNV->nbcopie = "-100";
					}


					// 								$CNV->sondeDebut = "";
					// 								$CNV->sondeFin = "";

					if ($CNV->chromosome != null && $CNV->chromosome != ""){
						$result = $CNV_DAO->ajouter_cnv($CNV);
						if ( is_nan($result) ){
							$nb_erreur++;
							$message .= "Erreur lors de l'enregistrement du CNV : ".$result;
						} else {
							$nb_cnv++;
						}
						unset($CNV);
					}


				}
				$nbLigne++;
			}
		}//fin traitement affymetrix 2.7 et cytoscanHD issus de CHAS

	}//fin du traitement affymetrix

	//traitement agilent
	else if ($idmarquepuce==1){
		if ( strpos($filename, ".txt") !== FALSE || strpos($filename, ".xls") === FALSE  || strpos($filename, ".csv") === FALSE ){
			if ( strpos($filename, ".csv") !== FALSE){
				$separateur = ";";
			} else {
				$separateur = "\t";
			}
			// On transforme le fichier en Ressources que l'on poste
			$lignes = file($_FILES['file']['tmp_name']);

			$nb_erreur = $nb_cnv = 0;
			$param = "";
			$genome = "";
			$debut = false;
			$enNbProbe = false;
			$header = null;
			$chrRef  = "";
			$startRef  = 99999999999999999999999999;
			$stopRef  = 0;
			$startProbRef  = "";
			$log2RatioRef  = 0;
			$stopProbRef   = "";
			$nb_marqueurs = 0;


			$p=0;
			foreach ($lignes as $num => $ligne){
				$ligne = str_replace ( "\"" , "" , $ligne);
				$ligne = trim($ligne);
				if (!$debut){
					if ( preg_match('/^Genome: hg18/', $ligne) || preg_match('/^\"Genome: hg18\"/', $ligne)) {
						$genome = "hg18";
						continue;
					} else if ( preg_match('/^Genome: hg19/', $ligne) || preg_match('/^\"Genome: hg19\"/', $ligne) ) {
						$genome = "hg19";
						continue;
					} else if ( preg_match('/^AberrationNo/', $ligne) ||  preg_match('/^Chr/', $ligne)|| preg_match('/^\"AberrationNo\"/', $ligne) ||  preg_match('/^\"Chr\"/', $ligne)||  preg_match('/^\"Chr\"/', $ligne)) {
						$pos = strpos($ligne, "#Probe");
						if ($pos === false) {
							$enNbProbe = false;
						}else {
							$enNbProbe = true;
						}
						$header = explode($separateur, $ligne);
						$index = 0;
						foreach ($header as $titrecolone){
							$titres[trim($titrecolone)] = $index;
							$index ++;
						}
						$debut = true;
						continue;
					} else if ( preg_match('/^Array Design Info:/', $ligne)  || preg_match('/^\"Array Design Info:\"/', $ligne)) {

					}else {
						if (trim($ligne) != null && trim($ligne) != ""){
							$analyse .= trim($ligne)."\n";
						}
						if ( preg_match('/^Aberration Filters:/', $ligne)){
							$debutstr = strpos("minProbes = ",$ligne);
							$nbProbemin = trim(substr($ligne, $debutstr+12, 2));
						}
					}
				} else {
					if ($header != null ){
						// On d&eacute;coupe le fichier et on instancie des cnv
						$elements = explode($separateur, $ligne);
						if (count($elements)>3){
							if ($enNbProbe ){
								$CNV = new CNV();
								$CNV->idpuce = $idpuce;
								$CNV->chromosome = substr(trim($elements[$titres["Chr"]]),3);
								$CNV->positiondebut = str_replace ( "," , "" , trim($elements[$titres["Start"]]));
								$CNV->positionfin = str_replace ( "," , "" , trim($elements[$titres["Stop"]]));
								if (isset($titres["Amplification"]) ) {
									$a1 = str_replace ( "\"" , "" , trim($elements[$titres["Amplification"]]) );
									$a1 = str_replace ( "," , "." , $a1);
									if ($a1 != 0){
										$CNV->log2ratio = $a1;
									}
								}
								if (isset($titres["Deletion"]) ){
									$a2 = str_replace ( "\"" , "" , trim($elements[$titres["Deletion"]]) );
									$a2 = str_replace ( "," , "." , $a2);
									if ($a2 != 0){
										$CNV->log2ratio = $a2;
									}
								}

								if (isset($titres["#Gains"]) && str_replace ( "\"" , "" , $elements[$titres["#Gains"]]) == "1"){
									$CNV->nbcopie = 3;
								}
								if (isset($titres["#Gains"]) && str_replace ( "\"" , "" , $elements[$titres["#Gains"]]) == "2"){
									$CNV->nbcopie = 4;
								}
								if (isset($titres["#Losses"]) && str_replace ( "\"" , "" , $elements[$titres["#Losses"]])  == "1"){
									$CNV->nbcopie = 1;
								}
								if (isset($titres["#Losses"]) && str_replace ( "\"" , "" , $elements[$titres["#Losses"]])  == "2"){
									$CNV->nbcopie = 0;
								}
								//$CNV->nb_marqueurs = str_replace ( "\"" , "" , trim($elements[$titres["#Probes"]]));
								$CNV->sondedebut = "";
								$CNV->sondefin = "";
								if ($CNV->chromosome != null && $CNV->chromosome != ""){
									$result = $CNV_DAO->ajouter_cnv($CNV);
									if ( !is_numeric($result) ){
										$nb_erreur++;
										$message .= "Erreur lors de l'enregistrement du CNV : ".$result;
									} else {
										$nb_cnv++;
									}
									unset($CNV);
								}
							} else {
								// 										$chr = substr(str_replace ( "\"" , "" , $elements[$titres["ChrName"]]),3);
								// 										if ($elements[$titres["Amplification"]] != null && $elements[$titres["Amplification"]] != "" && $elements[$titres["Amplification"]] != 0){
								// 											$log2Ratio = trim($elements[$titres["Amplification"]]);
									// 										}
									// 										if ($elements[$titres["Deletion"]] != null && $elements[$titres["Deletion"]] != "" && $elements[$titres["Deletion"]] != 0){
									// 											$log2Ratio = trim($elements[$titres["Deletion"]]);
									// 										}
									// 										if ($log2RatioRef == $log2Ratio && $chr == $chrRef){
									// 											if ($elements[$titres["Start"]] < $startRef){
										// 												$startRef = str_replace ( "\"" , "" , str_replace ( "," , "" , trim($elements[$titres["Start"]])));
										// 												$startProbRef = str_replace ( "\"" , "" , trim($elements[$titres["ProbeName"]]));
										// 											}
										// 											if ($elements[$titres["Stop"]] > $stopRef){
										// 												$stopRef = str_replace ( "\"" , "" , str_replace ( "," , "" , trim($elements[$titres["Stop"]])));
										// 												$stopProbRef = str_replace ( "\"" , "" , trim($elements[$titres["ProbeName"]]));
										// 											}
										// 											$nb_marqueurs ++;
										// 										} else {
										// 											if ($chrRef != 0 && $chrRef != null){
											// 												$CNV = new CNV();
											// 												$CNV->chromosome = $chrRef;
											// 												$CNV->debut =$startRef;
											// 												$CNV->fin = $stopRef;
											// 												$CNV->cn_statut = $log2RatioRef;
											// 												$CNV->nb_marqueurs = $nb_marqueurs;
											// 												$CNV->sondeDebut = $startProbRef;
											// 												$CNV->sondeFin = $stopProbRef;
											// 												$result = $CNV_DAO->enregistrer_cnv($CNV);
											// 												if ( $result == -1 || $result == -2){
											// 													$nb_erreur++;
											// 													$message .= "Erreur lors de l'enregistrement du CNV.";
											// 												} else {
											// 													$nb_cnv ++;
											// 												}

											// 												unset($Alteration);
											// 											}
											// 											$chrRef = $chr;
											// 											$startRef = str_replace ( "\"" , "" , trim($elements[$titres["Start"]]));
											// 											$stopRef =str_replace ( "\"" , "" ,  trim($elements[$titres["Stop"]]));
											// 											$log2RatioRef = $log2Ratio;
											// 											$nb_marqueurs = 1;
											// 											$startProbRef =str_replace ( "\"" , "" ,  trim($elements[$titres["ProbeName"]]));
											// 											$stopProbRef = str_replace ( "\"" , "" , trim($elements[$titres["ProbeName"]]));
											// 										}
										}

					}
				}
			}$p++;
		} // fin foreach
		// 					if ($header != null && $message == ""){
		// 						if (!$enNbProbe){
			// 							if ($chrRef != null && $chrRef != "0"){
			// 								$CNV = new Alteration();
				// 								$CNV->chromosome = $chrRef;
				// 								$CNV->positiondebut =$startRef;
				// 								$CNV->positionfin = $stopRef;
				// 								$CNV->log2ratio = $log2RatioRef;
				// 								//$CNV->nb_marqueurs = $nb_marqueurs;
				// 								$CNV->sondedebut = $startProbRef;
				// 								$CNV->sondefin = $stopProbRef;
				// 								$result = $CNV_DAO->enregistrer_cnv($CNV);
				// 								if ( $result == -1 || $result == -2){
				// 									$nb_erreur++;
					// 									$message .= "Erreur lors de l'enregistrement du CNV.";
					// 								}else {
					// 									$nb_cnv++;
					// 								}
					// 								unset($Alteration);
					// 							}
					// 						}
					// 					}
			}
		}//fin du traitement des fichier intervalle based report

		//traitement des puces illumina
		else if ($idmarquepuce==4){
			if ( strpos($filename, ".txt") !== FALSE){

				// On transforme le fichier en Ressources que l'on poste
				$lignes = file($_FILES['file']['tmp_name']);

				$param = "";
				$mapd = 0;
				$nbLigne = 0;
				$index =  array();
				foreach ($lignes as $num => $ligne){
					if ($nbLigne == 0){
						$titres = explode("\t", $ligne);
						
						$nb_titre = count($titres);
						for ($i = 0;$i<$nb_titre; $i++){
							$titre = $titres[$i];
							if (trim($titre)==='Value'){
								$index['nb_copie']= $i;
							}
							if (trim($titre)==='SampleID'){
								$index['identifiant']= $i;
							}
							if (trim($titre)==='Chr'){
								$index['chromosome']= $i;
							}
							if (trim($titre) === 'Start'){
								$index['debut']= $i;
							}
							if (trim($titre) === 'End'){
								$index['fin']= $i;
							}
							if (trim($titre)==='Comment'){
								$index['Comment']= $i;
							}
							if (trim($titre)==='BookmarkType'){
								$index['BookmarkType']= $i;
							}
							if (trim($titre)==='Author'){
								$index['Author']= $i;
							}
							if (trim($titre)==='CreatedDate'){
								$index['CreatedDate']= $i;
							}
						}
						// 								//print_r($index);echo "<br/>";
					}

					else {
						// On d&eacute;coupe le fichier et on instancie des AlterationChromosomique
						$elements = explode("\t", $ligne);
						$numero = $elements[$index['identifiant']];
						$numDossier = $DOSSIER_DAO->rechercher_numero_by_idpuce($puce->idpuce);
						if ($numero == $numDossier){
							$CNV = new CNV();
							$CNV->idpuce = $idpuce;
							if (isset($index['chromosome'])){
								$CNV->chromosome = $elements[$index['chromosome']];
							} else{
								$CNV->chromosome = "";
							}
							if (isset($index['debut'])){
								$CNV->positiondebut = str_replace ( "," , "" , $elements[$index['debut']]);
							} else{
								$CNV->positiondebut = "";
							}
							if (isset($index['fin'])){
								$CNV->positionfin = str_replace ("," , "" ,$elements[$index['fin']]);
							} else{
								$CNV->positionfin = "";
							}
							if (isset($index['nb_copie'])&& $elements[$index['nb_copie']] != ""){
								$CNV->nbcopie = $elements[$index['nb_copie']];
							}
							if (isset($index['nb_copie'])&& $elements[$index['nb_copie']] != ""){
								$CNV->nbcopie = $elements[$index['nb_copie']];
							}

							$CNV->commentaire = "BookmarkType : ".$elements[$index['BookmarkType']]
							. "Author : ".$elements[$index['Author']]
							. "CreatedDate : ".$elements[$index['CreatedDate']]
							. "Comment : ".$elements[$index['Comment']];

							if ($CNV->chromosome != null && $CNV->chromosome != ""){
								$result = $CNV_DAO->ajouter_cnv($CNV);
								if ( is_nan($result) ){
									$nb_erreur++;
									$message .= "Erreur lors de l'enregistrement du CNV : ".$result;
								} else {
									$nb_cnv++;
								}
								unset($CNV);
							}


						}
					}
					$nbLigne++;
				}
			}
		}//fin du traitement Illumina
			
			
		//mise à jour des données de la puce
		if ($message == ""){
			//Affymetrix
			if ($idmarquepuce == 2 && strpos($filename, ".cn_segments") !== FALSE ){
				$puce->taillemin = $puce->taillemin." ".$mgss;
				$puce->nbmqdeviant = $puce->nbmqdeviant." ".$mmis;
				$puce->qualite = $puce->qualite." MAPD =".$mapd;
				$puce->versionhg = $genome;
				$puce->analyse = $puce->analyse." ".$analyse;
				$idp = $PUCE_DAO->modifier_puce($puce);
				if( is_nan($idp) ){
					$message.= "Erreur lors de la mise à jour des données de la puce : ".$idp."<br/>";
				}

			}else //Agilent
				if ($idmarquepuce == 1){
				$puce->nbmqdeviant = $nbProbemin;
				$puce->versionhg = $genome;
				$puce->analyse = $puce->analyse.$analyse;
				$idp = $PUCE_DAO->modifier_puce($puce);
				if( is_nan($idp) ){
					$message.= "Erreur lors de la mise à jour des données de la puce : ".$idp."<br/>";
				}
			}

		}
		// On supprime le fichier de segments
		unlink($_FILES['file']['tmp_name']);
		// 			$message .= "$nb_cnv CNV ont enregistrés ($nb_erreur erreur(s))<br />\n";
	} // Fin traitement du fichier
} // Fin de si id puce
else {
	$message .="pas d'idPuce";
}
}//fin de pas cancell

} // fin de pas html4
else {
	$message .="pas html4";
	}
	print_r("{state: true, name:'".$message."', size:".$_FILES["file"]["size"]."}");

	?>

